package net.cyue.nest.nestjava.core.injector;

import net.cyue.nest.nestjava.common.data.MetaType;

import java.util.Map;

public abstract class InstanceRegistry {
  protected Map<MetaType, InstanceWrapper> instanceWrapperMap;

  public abstract InstanceWrapper registerInstance(MetaType metaType, ModuleData host);


  public InstanceWrapper getInstanceWrapper(MetaType metaType) {
    return this.instanceWrapperMap.get(metaType);
  }

  /**
   * @param clz Class
   * @return 拿不到 injectable 的实例
   */
  public InstanceWrapper getInstanceWrapper(Class<?> clz) {
    MetaType mt = new MetaType(clz, null);
    return this.instanceWrapperMap.get(mt);
  }
  public Object getInstance(MetaType metaType) {
    InstanceWrapper wrapper = this.instanceWrapperMap.get(metaType);
    if (wrapper == null) {
      return null;
    }
    return wrapper.getInstance();
  }

  /**
   * @param clz Class
   * @return 拿不到 injectable 的实例
   */
  public Object getInstance(Class<?> clz) {
    MetaType mt = new MetaType(clz, null);
    return this.getInstance(mt);
  }
}

